﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Com.AlbLab.GEP.Domain.Entities;
using common.pages;

namespace Com.AlbLab.CR.Web.controls
{
    public partial class ResponseR01 : System.Web.UI.UserControl, IResponse
    {
        public event SaveEventHandler Save;

        public void Initialize(PraticaBase p)
        {
            GEP_TESTATA t = p.GEP_testata;
            hidPrtId.Value = t.Id_tes_cod_pratica.ToString();
            hidTipo.Value = t.Tes_Cod_Servizio.Trim();
            if (t.Gep_risposta.Response == null)
            {
                esito.SelectedValue = "1";
            cod_servizio.Text = t.Tes_Cod_Servizio.Trim();
            piva_utente.Text = t.Tes_Piva_Utente.Trim();
            piva_distributore.Text = t.Tes_Piva_Distributore.Trim();
            cod_prat_utente.Text = t.Id_tes_cod_pratica.ToString();
            cod_prat_distr.Text = t.Tes_Cod_Prat_Utente.Trim();
            cod_pod.Text = t.Tes_Pod.Trim();

            misuratore_elettronico.SelectedValue = t.Tes_DBA_Mis_Eleco.ToUpper().Trim();
            matr_mis_attiva.Text = t.Tes_DBA_Matr_Att.Trim();
            matr_mis_reattiva.Text = t.Tes_DBA_Matr_Rea.Trim();
            matr_mis_potenza.Text = t.Tes_DBA_Matr_Pot.Trim();

            //riattivazione???
            GEP_RISPOSTA res = new GEP_RISPOSTA();
            res.Resp_Id = Convert.ToDecimal(hidPrtId.Value);
            res.Tipo_servizio = hidTipo.Value.Trim();
            res.Response = buildRecord();

            if (Save != null)
                Save(this, res, true);

            } 
        }

         public System.Xml.XmlDocument buildRecord()
         {
             System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
             doc.LoadXml("<Response></Response>");

             foreach (Control c in this.Controls)
             {
                 if (c.GetType() == typeof(TextBox))
                 {
                     TextBox t = (TextBox)c;
                     System.Xml.XmlElement el = doc.CreateElement(t.ID);
                     el.InnerXml = t.Text;
                     doc.DocumentElement.AppendChild(el);
                 }
                 else if (c.GetType() == typeof(DropDownList))
                 {
                     DropDownList t = (DropDownList)c;
                     System.Xml.XmlElement el = doc.CreateElement(t.ID);
                     el.InnerXml = t.SelectedValue;
                     doc.DocumentElement.AppendChild(el);
                 }
             }
             return doc;
         }

         public void setdRecord(System.Xml.XmlDocument doc,bool lReadOnly)
         {

             foreach (System.Xml.XmlElement el in doc.DocumentElement.ChildNodes)
             {
                 Control cc = this.FindControl(el.Name);
                 // Blocca o meno il campo dalla scrittura
                 if (cc.GetType() == typeof(TextBox))
                     ((TextBox)cc).ReadOnly = lReadOnly;
                 else if (cc.GetType() == typeof(DropDownList))
                     ((DropDownList)cc).Enabled = !lReadOnly;

                 // Riempe il campo se valorizzato.
                 if (!string.IsNullOrEmpty(el.InnerXml))
                 {
                     if (cc.GetType() == typeof(TextBox))
                         ((TextBox)cc).Text = el.InnerXml;
                     else if (cc.GetType() == typeof(DropDownList))
                         ((DropDownList)cc).SelectedValue = el.InnerXml;
                 }
             }
         }

        public void btnSave_OnClick(object sender, EventArgs e)
        {
            if (!isValid())
                return;

            GEP_RISPOSTA res = new GEP_RISPOSTA();
            res.Resp_Id = Convert.ToDecimal(hidPrtId.Value);
            res.Tipo_servizio = hidTipo.Value;
            res.Response = buildRecord();

            if (Save != null)
                Save(this, res, false);
        }

        public bool isValid()
        {
            bool valid = true;

            if (esito.SelectedValue.Equals("1"))
                if (string.IsNullOrEmpty(data_riattivazione.Text))
                {
                    ((BasePage)this.Page).info.AddMessage("La data di riattivazione è obbligatoria!!", GEP.Domain.LivelloMessaggio.WARNING);
                    valid = false;
                }

            if (valid) return true;
            else return false;
        }
    }
}